/**
 * 需求：对已经开发好的项目中的任何一个类，创建实例时，打印日志信息
 * 输出哪一个类被创建了，并输出传递了哪些参数信息
 */

function LoggerInfoDec(targetClass: any) {
  /**
   * 返回一个新的类，这个被用于替代 Test 类
   */
  class Logger extends targetClass {
    constructor(...args: any) {
      super(...args);
      console.log('类被创建');
    }
  }

  return Logger;
}

@LoggerInfoDec
class Test {
  name!: string;
  age!: number;
  // 先执行原来的构造函数
  constructor(name: string) {
    this.name = name;
  }
  eat() {
    console.log(this.name, '吃饭');
  }
}

new Test('xuke');

export {};
